The present invention relates to computer programming and more particularly to computer programs that provide knowledge enhanced electronic logic or computational decision making and to programming tools for use in developing knowledge enhanced electronic logic or computational decision making programs which simulate human decision making.
Formal processes that describe human decision-making have been discussed for many years. As early as 1738 Daniel Bernouilli announced the concept of decision theory in an attempt to explain the non-linear value of money. Both knowledge capture and decision-making have long been addressed from the standpoint of academic research. Dr. Horst Rittel and Dr. Melvin Webber, in their paper titled “Dilemmas in a general Theory of Planning”, identified the difference between “tame” problems (those where a formula can be used to calculate an answer) and “wicked” problems (where the answer lies in the gray area, somewhere between good and bad). They focused their work on city planning activities and created the “Issues Based Information System” (IBIS) process in order to decompose a problem by structuring the information in the form of a decision tree including decisions and arguments. Researchers working on the decision-making processes determined long ago that problems are best broken down or decomposed in order to solve them. Many decision-making methodologies focus on choosing the best option or alternative. These techniques usually emphasize decomposing the decision into criteria or attributes against which all alternatives should be compared. First, each criteria is rated as to its importance in the final decision and then each optional solution is compared against each of the criteria. These processes have been given several names in the academic literature such as Multi Attribute Decision Making (MADM), Multi-Attribute Value Theory (MAVT), Multi-Attribute Utility Theory (MAUT) and Multi-Criteria Decision Analysis (MCDA). A similar spin-off has been Analytical Hierarchy Process (AHA) decision making that has focused on making pair wise comparisons. These processes work well when comparing similar options where the same criteria are applicable. This type of decision is applicable to choosing a particular car or choosing between an apple and an orange but not when balancing choices where the criteria are inconsistent. Further, these processes have not been adapted for use in computational decision-making programs for embedded systems or for real time control.
Artificial Intelligence and Expert Systems have taken many forms since the topics were first conceived. Rule-based systems were commonly referred to as reverse chaining or forward chaining. Reverse chaining systems started with a solution and worked back through all the data to determine whether the solution was valid. This approach worked for simple decisions when some data might be missing. Forward chaining systems start with the data and try to determine the solution. Rule-based systems supplied the concepts of confidence factors or certainty factors as part of the math behind the results. These types of systems were commonly used to evaluate static problems where the rules are fixed and the impact of each rule is stable. In many real world decision-making situations rule based systems quickly become complex and hard to understand. Computer programs based on rule based systems are usually expensive to develop and difficult to debug. Further, they can be inflexible and if changes occur may require complete recoding of system solutions.
Fuzzy Logic was developed as a mechanism to circumvent the need for rigorous mathematical modeling. Fudge factors in control systems were replaced by self-explanatory linguistic descriptions that use soft terms that most humans can easily understand to describe a situation. Discrete data items are translated or fuzzified into different levels of participation in membership functions that describe the input domain in easily understood terms. The membership functions are characterized by simple geometric patterns which extend across different regions of the input domain. Likewise the output range is described by membership functions having geometric patterns which extend across different regions in the output range. Linguistic type if-then rules are then formulated to define the transfer of membership participation from the input membership functions to the output membership functions. The output is then defuzzified according to a combinational strategy such as center of gravity. Software packages exist which provide program development interfaces that enable the generation of typical input and output membership functions and the on-screen generation of transfer rules. Such software may also allow for multiple inputs and outputs which may be visually displayed as blocks on the left and right sides of a program development screen with blocks for the fuzzy logic rules shown in between. Some programs then allow fuzzy logic program code may be automatically generated based on the functions and rules defined on the program development screen. Fuzzy logic can be used for decision-making but is not well adapted to handling multiple inputs and outputs or for enabling complex interactions between the components of the system. Fuzzy logic rules may have the advantage of allowing simple descriptions but they are likewise limited in what they can provide. It is often difficult to explain the results of fuzzy logic decisions because the result is determined by geometric based participation in various membership domains.
Neural nets were developed to mimic the structure of the human brain and can provide a form of decision-making. Each neuron in a neural net processes incoming inputs and supplies outgoing outputs. The outputs are linked to other neurons which are frequently deployed in multiple interconnected layers across which signals are transferred from inputs on one side to outputs on the other side with some of the neurons providing interfaces to the outside world. Neural nets are “trained” to establish a pattern of desired behavior. Learning algorithms modify individual neurons by weighting or reinforcing certain of their connections with other neurons. Neural nets are fascinating to contemplate but require a lot of program code, are hard to properly train and are not well adapted for dealing with applications requiring sharp changes in output based on limited input variation.